/*
 * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @addtogroup AbilityRuntime
 * @{
 *
 * @brief 提供应用级别上下文相关的接口。
 *
 * @syscap SystemCapability.Ability.AbilityRuntime.Core
 * @since 13
 */

/**
 * @file application_context.h
 *
 * @brief 提供应用级别上下文相关的接口。
 *
 * @library libability_runtime.so
 * @kit AbilityKit
 * @include <AbilityKit/ability_runtime/application_context.h>
 * @syscap SystemCapability.Ability.AbilityRuntime.Core
 * @since 13
 */

#ifndef ABILITY_RUNTIME_APPLICATION_CONTEXT_H
#define ABILITY_RUNTIME_APPLICATION_CONTEXT_H

#include <stdint.h>
#include <stddef.h>
#include <AbilityKit/ability_base/want.h>
#include "ability_runtime_common.h"
#include "context_constant.h"
#include "start_options.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 获取本应用的应用级的缓存目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收本应用的应用级的缓存目录。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 13
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetCacheDir(
    char* buffer, int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的文件数据加密等级。
 *
 * @param areaMode 指向接收数据加密等级的指针
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 13
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetAreaMode(AbilityRuntime_AreaMode* areaMode);

/**
 * @brief 获取应用包名。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 13
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetBundleName(
    char* buffer, int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的临时文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetTempDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的通用文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetFilesDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的数据库文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetDatabaseDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的首选项文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetPreferencesDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的安装文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetBundleCodeDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的分布式文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetDistributedFilesDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的云文件目录。
 *
 * @param buffer 指向缓冲区的指针，用于接收应用包名。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入到缓冲区的字符串长度。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 * @since 16
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetCloudFileDir(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用的应用级的资源目录。
 *
 * @param moduleName 模块名。
 * @param buffer 缓冲区，缓存目录字符串写入该区域。
 * @param bufferSize 缓冲区大小（单位：字节）。
 * @param writeLength 在返回ABILITY_RUNTIME_ERROR_CODE_NO_ERROR时，表示实际写入到缓冲区的字符串长度（单位：字节）。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 当前应用的上下文不存在。
 * @since 20
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetResourceDir(const char* moduleName,
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 启动当前应用的UIAbility。
 *
 * @permission {@code ohos.permission.NDK_START_SELF_UI_ABILITY}
 * @param want 启动当前应用UIAbility时需要的Want信息。
 * 详细内容参考 {@link AbilityBase_Want}.
 * @return 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示接口调用成功。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PERMISSION_DENIED} 时，表示调用方权限校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 时，表示调用方入参校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_SUPPORTED} 时，表示设备类型不支持。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_SUCH_ABILITY} 时，表示指定的Ability名称不存在。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INCORRECT_ABILITY_TYPE} 时，表示接口调用Ability类型错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROWDTEST_EXPIRED} 时，表示众测应用到期。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_WUKONG_MODE} 时，表示Wukong模式，不允许启动/停止Ability。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CONTROLLED} 时，表示应用被管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_EDM_CONTROLLED} 时，表示应用被EDM管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROSS_APP} 时，表示限制API 11以上版本三方应用跳转。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INTERNAL} 时，表示内部错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_TOP_ABILITY} 时，表示非顶层应用。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_UPPER_LIMIT_REACHED} 时，表示应用多实例已达到上限（从API17开始）。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_APP_INSTANCE_KEY_NOT_SUPPORTED} 时，表示不允许设置APP_INSTANCE_KEY（从API17开始）。
 * 详细内容参考 {@link AbilityRuntime_ErrorCode}.
 * @since 15
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_StartSelfUIAbility(AbilityBase_Want *want);

/**
 * @brief 通过StartOptions启动当前应用的UIAbility。
 *
 * @permission {@code ohos.permission.NDK_START_SELF_UI_ABILITY}
 * @param want 启动当前应用UIAbility时需要的Want信息。
 * 详细内容参考 {@link AbilityBase_Want}。
 * @param options 启动当前应用UIAbility时需要的StartOptions信息。如果该参数中startVisibility属性的值不为空，必须确保当前应用已添加到状态栏，
 *                否则会返回ABILITY_RUNTIME_ERROR_VISIBILITY_SETTING_DISABLED错误码。
 * 详细内容参考 {@link AbilityRuntime_StartOptions}。
 * @return 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示接口调用成功。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PERMISSION_DENIED} 时，表示调用方权限校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 时，表示调用方入参校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_SUPPORTED} 时，表示设备类型不支持。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_SUCH_ABILITY} 时，表示指定的Ability名称不存在。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INCORRECT_ABILITY_TYPE} 时，表示接口调用Ability类型错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROWDTEST_EXPIRED} 时，表示众测应用到期。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_WUKONG_MODE} 时，表示Wukong模式，不允许启动/停止Ability。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CONTROLLED} 时，表示应用被管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_EDM_CONTROLLED} 时，表示应用被EDM管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROSS_APP} 时，表示限制API 11以上版本三方应用跳转。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INTERNAL} 时，表示内部错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_TOP_ABILITY} 时，表示非顶层应用。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_VISIBILITY_SETTING_DISABLED} 时，表示不允许设置窗口启动可见性。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_MULTI_APP_NOT_SUPPORTED} 时，表示不支持应用分身和多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INVALID_APP_INSTANCE_KEY} 时，表示无效多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_UPPER_LIMIT_REACHED} 时，表示应用多实例以达到上限。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_MULTI_INSTANCE_NOT_SUPPORTED} 时，表示不支持应用多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_APP_INSTANCE_KEY_NOT_SUPPORTED} 时，表示不允许设置APP_INSTANCE_KEY。
 * 详细内容参考 {@link AbilityRuntime_ErrorCode}。
 * @since 17
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_StartSelfUIAbilityWithStartOptions(AbilityBase_Want *want,
    AbilityRuntime_StartOptions *options);

/**
 * @brief 获取应用的版本号。
 *
 * @param versionCode 指向应用包版本号的指针，对应bundleInfo中的versionCode字段。
 * @return The error code.
 *         {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 查询成功。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 入参versionCode为空。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 应用上下文不存在。
 *         {@link ABILITY_RUNTIME_ERROR_CODE_GET_APPLICATION_INFO_FAILED} 获取应用信息失败。
 * @since 21
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetVersionCode(int64_t* versionCode);

/**
 * @brief 通过StartOptions启动当前应用的UIAbility，并获取目标UIAbility的进程号。
 *        接口不能在应用主线程调用，但可以在应用创建的子进程的主线程中调用。
 *        如果在应用的主线程中调用，会返回ABILITY_RUNTIME_ERROR_CODE_MAIN_THREAD_NOT_SUPPORTED错误码。
 *
 * @permission {@code ohos.permission.NDK_START_SELF_UI_ABILITY}
 * @param want 启动当前应用UIAbility时需要的Want信息。
 * 详细内容参考 {@link AbilityBase_Want}。
 * @param options 启动当前应用UIAbility时需要的StartOptions信息。如果该参数中startVisibility属性的值不为空，必须确保当前应用已添加到状态栏，
 *                否则会返回ABILITY_RUNTIME_ERROR_VISIBILITY_SETTING_DISABLED错误码。
 * 详细内容参考 {@link AbilityRuntime_StartOptions}。
 * @param targetPid 出参，目标UIAbility所在的进程号。
 * @return 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示接口调用成功。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PERMISSION_DENIED} 时，表示调用方权限校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 时，表示调用方入参校验失败。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_SUPPORTED} 时，表示设备类型不支持。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_SUCH_ABILITY} 时，表示指定的Ability名称不存在。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INCORRECT_ABILITY_TYPE} 时，表示接口调用Ability类型错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROWDTEST_EXPIRED} 时，表示众测应用到期。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_WUKONG_MODE} 时，表示Wukong模式，不允许启动/停止Ability。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CONTROLLED} 时，表示应用被管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_EDM_CONTROLLED} 时，表示应用被EDM管控。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CROSS_APP} 时，表示限制API 11以上版本三方应用跳转。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INTERNAL} 时，表示内部错误。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NOT_TOP_ABILITY} 时，表示非顶层应用。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_VISIBILITY_SETTING_DISABLED} 时，表示不允许设置窗口启动可见性。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_MULTI_APP_NOT_SUPPORTED} 时，表示不支持应用分身和多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_INVALID_APP_INSTANCE_KEY} 时，表示无效多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_UPPER_LIMIT_REACHED} 时，表示应用多实例以达到上限。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_MULTI_INSTANCE_NOT_SUPPORTED} 时，表示不支持应用多实例。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_APP_INSTANCE_KEY_NOT_SUPPORTED} 时，表示不允许设置APP_INSTANCE_KEY。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_START_TIMEOUT} 时，表示启动UIAbility超时。
 * 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_MAIN_THREAD_NOT_SUPPORTED} 时，表示接口不允许在应用主线程调用。
 * 详细内容参考 {@link AbilityRuntime_ErrorCode}。
 * @since 21
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_StartSelfUIAbilityWithPidResult(AbilityBase_Want *want,
    AbilityRuntime_StartOptions *options, int32_t *targetPid);

/**
 * @brief 获取本应用首次启动UIAbility时的WantParams参数。
 * 详细内容参考 {@link AbilityBase_Want}。
 * @param buffer 指向缓冲区的指针，用于接收WantParams参数。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入缓冲区的字符串长度（单位：字节）。
 * @return 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示接口调用成功。
 *         在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 时，入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 时，应用上下文不存在。
 * @since 21
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetLaunchParameter(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

/**
 * @brief 获取本应用最近一次启动UIAbility时的WantParams参数。
 * 详细内容参考 {@link AbilityBase_Want}。
 * @param buffer 指向缓冲区的指针，用于接收WantParams参数。
 * @param bufferSize 缓冲区大小，单位为字节。
 * @param writeLength 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示实际写入缓冲区的字符串长度（单位：字节）。
 * @return 在返回 {@link ABILITY_RUNTIME_ERROR_CODE_NO_ERROR} 时，表示接口调用成功。
 *         在返回 {@link ABILITY_RUNTIME_ERROR_CODE_PARAM_INVALID} 时，入参buffer或者writeLength为空，或者缓冲区大小小于需要写入的大小。
 *         在返回 {@link ABILITY_RUNTIME_ERROR_CODE_CONTEXT_NOT_EXIST} 时，应用上下文不存在。
 * @since 21
 */
AbilityRuntime_ErrorCode OH_AbilityRuntime_ApplicationContextGetLatestParameter(
    char* buffer, const int32_t bufferSize, int32_t* writeLength);

#ifdef __cplusplus
} // extern "C"
#endif

/** @} */
#endif // ABILITY_RUNTIME_APPLICATION_CONTEXT_H
